// 使用 Object.getOwnPropertySymbols(object)：得到object对象的所有Symbol值的属性名数组

/**
 *  也可以使用 Object.defineProperty(obj,Symbol值,{配置参数})的方式装载symbol值的属性
 *  此时使用getOwnPropertySymbols()不受是否可枚举属性的影响，可以获取对象所有的symbol值的属性名数组
 * */ 

let obj = {
    name: "Hydra",
    age: 35,
    sex: "男"
}

obj[Symbol.for("sayHello")] = function() {
    console.log("大家好");
}

obj[Symbol.for("sayGoodBye")] = function() {
    console.log("再见");
}

let keys = Object.keys(obj); // keys()方法只能返回普通属性的属性名数组
console.log("keys =",keys); // [ 'name', 'age', 'sex' ]



Object.defineProperty(obj,"secret",{
    value: "不能说",
})

// Object.getOwnPropertyNames：获取所有普通属性的属性名数组（包含不可枚举属性）
let allKeys = Object.getOwnPropertyNames(obj);
console.log("allKeys = ",allKeys);

Object.defineProperty(obj,Symbol.for("sayShit"),{
    value: function() {
        console.log("去死！")
    },
    enumerable: false
})

obj[Symbol.for("sayShit")]();

console.log("---------遍历symbol值的属性------------")
let symbolKeys = Object.getOwnPropertySymbols(obj);
// console.log("symbolKeys =",symbolKeys)
for (let v of symbolKeys) {
    console.log(v)
}